// 第一种思路：
// 主要思路是遍历数组 nums，每次取出的数字变量为 num，同时设置一个下标 ans
// 在遍历过程中如果发现数字与需要移除的值不相同时，则进行拷贝字符串
// nums[ans] = num，ans 自增 1
// 如果相同的时候，则跳过该数字不进行拷贝覆盖，最后 ans 即为新的数组长度

var removeElement = function (nums, val) {
  let ans = 0;
  for (const num of nums) {
    if (num != val) {
      nums[ans] = num;
      ans++;
    }
  }
  return ans;
}


// 思路2：主要思路是遍历 nums，遍历指针为 i，总长度为 ans
// 在遍历的过程中如果出现了数字与需要移除的值不相同时，则 i 自增 1，继续下一次遍历
// 如果相同的时候，则将 nums[i] 和 nums[ans - 1] 交换，交换后就少了一个元素

var removeElement = function (nums, val) {
  let ans = nums.length;
  for (let i = 0; i < ans;) {
    if (nums[i] == val) {
      nums[i] = nums[ans - 1];
      ans--
    } else {
      i++;
    }
    return ans;
  }
}